
//  加0
export function add0(m) {
  return m<10?'0'+m:m
}
//  时间计算
export function timeCompute(time) {
  let y = time.getFullYear()
  let m = time.getMonth() + 1
  let d = time.getDate()
  let h = time.getHours()
  let mm = time.getMinutes()
  let s = time.getSeconds()
  return y + '-' + add0(m) + '-' + add0(d) + ' ' + add0(h) + ':' + add0(mm) + ':' + add0(s)
}

//	 日期格式
export function getDateFormat(time) {
  let y = time.getFullYear()
  let m = time.getMonth() + 1
  let d = time.getDate()
  return y + '-' + add0(m) + '-' + add0(d)
}

//  时间字符串格式
// export function timeString(time) {
//   let y = time.getFullYear()
//   let m = time.getMonth() + 1
//   let d = time.getDate()
//   let h = time.getHours()
//   let mm = time.getMinutes()
//   let s = time.getSeconds()
//   let S =time.getMilliseconds();
//   return y + add0(m) + add0(d) + add0(h) + add0(mm) + add0(s) + add0(S)
// }

/**
 * 过滤对象中属性值为空的属性
 * @param {*} obj 需要过滤的对象
 */
export function filterParams(obj) {
  let _newObj = {}  // 返回一个新对象，不影响原来的对象
  for(let key in obj) {
    if((obj[key] === 0 || obj[key]) && obj[key].toString().replace(/(^\s*)|(\s*$)/g, '') !== ''){
      if(typeof _newObj[key] == 'string') {
        _newObj[key] = obj[key].replaceAll(" ","")
      }else{
        _newObj[key] = obj[key]
      }
    }
  }
  return _newObj
}

/**
 * 根据元素值删除数组中的元素
 * @param {*} val 需要删除的值
 */
export function valueRemove(val) {
  let idx = this.indexOf(val)
  if(idx > -1){
    this.splice(idx,1)
  }
}

/*
*   对象数组去重
*
*/
export function uniqObjInArray(objarray) {
  let len = objarray.length;
  let tempJson = {};
  let res = [];
  for(let i = 0;i < len;i++){
      //取出每一个对象
      tempJson[JSON.stringify(objarray[i])] = true;
  }
  let keyItems= Object.keys(tempJson);
  for(let j = 0;j < keyItems.length;j++){
      res.push(JSON.parse(keyItems[j]));
  }
  return res;
}

/*
* *   对象数组根据某个属性去重
*/
export function uniqObjArrById(array){
  let obj = {}
  array = array.reduce(function(item, next) {
      obj[next.goodsId] ? '' : obj[next.goodsId] = true && item.push(next);
      return item;
   }, []);
  return array
}

// 对象数组根据属性去重1
export function deduplication(array,key){
  let obj = {}
  array = array.reduce(function(item, next) {
      obj[next[key]] ? '' : obj[next[key]] = true && item.push(next);
      return item;
   }, []);
   return array
}

//  对象数组根据属性去重2
export function removeRepeat(arr, field){
  let result = {}, reSet = [];
  let s = arr.map( v => v[field]);    //  s 商品ID数组

  for(let i in s){
    if(result[s[i]] === undefined) {
      result[s[i]] = i
    } else {
      reSet.push(i)
    }
  }
  for(let key in reSet){
    arr.splice(reSet[key] - key, 1)
  }
  return arr
}

//	对象数组根据多个属性去重
export function deduplicationBykey(array,key1,key2,key3){
	// 缓存用于记录
    const cache = [];
    for (const t of array) {
        // 检查缓存中是否已经存在
        if (cache.find(c => c[key1] === t[key1] && c[key2] === t[key2] && c[key3] === t[key3])) {
            // 已经存在说明以前记录过，现在这个就是多余的，直接忽略
            continue;
        }
        // 不存在就说明以前没遇到过，把它记录下来
        cache.push(t);
    }

    // 记录结果就是过滤后的结果
    return cache;
}

//	对象数组根据多个属性去重
export function deduplicationBykey1(array,key1,key2,key3,key4,key5){
	// 缓存用于记录
    const cache = [];
    for (const t of array) {
        // 检查缓存中是否已经存在
        if (cache.find(c => c[key1] === t[key1] && c[key2] === t[key2] && c[key3] === t[key3] && c[key4] === t[key4] && c[key5] === t[key5])) {
            // 已经存在说明以前记录过，现在这个就是多余的，直接忽略
            continue;
        }
        // 不存在就说明以前没遇到过，把它记录下来
        cache.push(t);
    }

    // 记录结果就是过滤后的结果
    return cache;
}

//  验证日期格式是否合法
export function checkDate(dateStr) {
  return new Date(dateStr).getDate() == dateStr.substring(dateStr.length-2)
}

export function Subtr(arg1, arg2) {
  var r1, r2, m, n;
  try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }
  try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }
  m = Math.pow(10, Math.max(r1, r2));
  //last modify by deeka
  //动态控制精度长度
  n = (r1 >= r2) ? r1 : r2;
  return -((arg1 * m - arg2 * m) / m).toFixed(n);
}

export function accAdd(arg1, arg2) {
  var r1, r2, m;
  try { r1 = arg1.toString().split(".")[1].length }catch (e) { r1 = 0 }
  try { r2 = arg2.toString().split(".")[1].length }catch (e) { r2 = 0 }
  m = Math.pow(10, Math.max(r1, r2))
  return (accMul(arg1, m) + accMul(arg2, m)) / m;
}

export function accMul(arg1, arg2) {
  if(!arg1){ arg1 = '0' }
  if(!arg2){ arg2 = '0' }
  var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
  try{ m += s1.split(".")[1].length }catch(e){}
  try { m += s2.split(".")[1].length }catch(e){}
  return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m)
}


/**
 * 四舍五入保留N位小数
 * @param {number} num 需要四舍五入的数字
 * @param {number} pos 需要保留的小数位数
 */
export function fomatFloat(num,pos){
  // var result = Math.round(num*Math.pow(10, pos))/Math.pow(10, pos)
  var result = Number(num) + 0.000000001
  return result .toFixed(pos)
}

/* 添加水印
 * @param {string} text 水印文字
 */
export function watermark(text){
  const canvas = document.createElement('canvas')
  canvas.width = '350'
  canvas.height = '200'
  const ctx = canvas.getContext('2d')
  ctx.clearRect(0, 0, 200, 200) // 绘制之前画布清除
  ctx.font = '24px 微软雅黑'
  ctx.rotate(-20 * Math.PI / 180) // 为了实现水印倾斜效果,旋转画布坐标系
  ctx.fillStyle = 'rgba(100,100,100,0.15)' // 画笔颜色
  ctx.fillText(text, 40, 100) // 书写的内容及位置
  ctx.rotate('20*Math.PI/180') // 坐标系还原,如果后续没有其他操作,这一步可以省略
  // 将canvas的内容转换为base64编码(把画布转化为图片)
  const data = canvas.toDataURL('image/png', 1) // 1表示质量(无损压缩)

  var watermark = document.createElement('div')
  watermark.style.width = '100%'
  watermark.style.height = '100%'
  watermark.style.position = 'fixed'
  watermark.style.left = '0'
  watermark.style.top = '0'
  watermark.style.pointerEvents = 'none'
  watermark.style.background = 'url(' + data + ') repeat'
  watermark.style.zIndex = '9999'
  document.body.append(watermark)
}
